package com.itheima.utils;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * oss操作相关工具类
 */
@Component
public class OssUtil {

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;

    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;

    /**
     * 更新用户头像
     * 上传到oss
     *
     * @param updateFile
     * @return
     */
    public String updateUserImageUrl(String userId, MultipartFile updateFile) {
//        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
//        String accessKeyId = "LTAI5t93DQZVq5Ca1P8PLf71";
//        String accessKeySecret = "g2Bl0DHAc8D0UowTLzsntDQl42kI2d";
        // 填写Bucket名称，例如examplebucket。
        String bucketName = "finally-oss";
        // 填写Object完整路径，例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "user_image/" + userId + ".jpg";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        String url = endpoint.substring(0, 8) + bucketName + "." + endpoint.substring(8, endpoint.length()) + "/" + objectName;
        try {
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(updateFile.getBytes()));
        } catch (Exception e) {
            System.out.println("Error Message:" + e.getMessage());
            return "false";
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;
    }

    /**
     * 上传message的图片集到oss
     *
     * @param updateFiles
     * @return
     */
    public List<String> updateMessageImageUrl(List<MultipartFile> updateFiles) {
//        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
//        String accessKeyId = "LTAI5t93DQZVq5Ca1P8PLf71";
//        String accessKeySecret = "g2Bl0DHAc8D0UowTLzsntDQl42kI2d";
        // 填写Bucket名称，例如examplebucket。
        String bucketName = "finally-oss";
        // 填写Object完整路径，例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。

        // 创建OSSClient实例。
        List<String> urls = new ArrayList<>();
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            for (int i = 0; i < updateFiles.size(); i++) {
                MultipartFile updateFile = updateFiles.get(i);
                String objectName = "message_resource/" + System.currentTimeMillis() + (i + 1) + updateFile.getOriginalFilename().substring(updateFile.getOriginalFilename().lastIndexOf("."));

                ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(updateFile.getBytes()));
                String url = endpoint.substring(0, 8) + bucketName + "." + endpoint.substring(8, endpoint.length()) + "/" + objectName;
                urls.add(url);
            }
        } catch (Exception e) {
            System.out.println("Error Message:" + e.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return urls;
    }
}
